﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using ControlStock.Dominio;

namespace ControlStock.Repositorio
{
    public class ArticuloRepositorio
    {
        Conexion Conn;
        public ArticuloRepositorio()
        {
            Conn = new Conexion();
        }

        public int Agregar(Articulos Articulo)
        {
            String Consulta = " Insert into ARTICULO (Art_Descripcion, Art_Precio, Art_Tipo, ";
            Consulta += " Art_Estado) ";
            Consulta += " VALUES ('" + Articulo.Descripcion_Art + "'," + (Articulo.Precio_Art) + "," + (int)Articulo.Tipo_Art + "," + (Articulo.Estado_Art ? 1 : 0) + ") Select @@Identity ";
            int IdArticulo = Conn.Insertar(Consulta);
            Consulta = " Insert into DEPOSITO_ARTICULO (Art_Id, Dep_Id, Cantidad) Values (" + IdArticulo + "," + Articulo.Deposito.Id_Dep + ", " + Articulo.Cantidad_Art + ")";
            Conn.ModificarEliminar(Consulta);
            return IdArticulo;
        }

        public void Modificar(Articulos Articulo)
        {
            String Consulta = " Update ARTICULO Set Art_Descripcion = '" + Articulo.Descripcion_Art + "', Art_Precio = " + Articulo.Precio_Art + ", Art_Tipo = " + (int)Articulo.Tipo_Art + ", ";
            Consulta += " Art_Estado = " + (Articulo.Estado_Art ? 1 : 0) + " Where Art_Id = " + Articulo.Id_Art;
            Conn.ModificarEliminar(Consulta);
            Consulta = "Update deposito_articulo set cantidad = " + Articulo.Cantidad_Art + " where art_id = " + Articulo.Id_Art;
            Conn.ModificarEliminar(Consulta);
        }


        public List<Articulos> Buscardescrip(string descripcion, string tipousu)
        {
            String Consulta = "";
            if (tipousu == "Administrador")
            {
                //String Consulta = "Select * From ARTICULO Where Art_Descripcion Like '%" + descripcion + "%'";
                Consulta = " select A.Art_Id, A.Art_Descripcion, A.Art_Precio, D.Cantidad, A.Art_Tipo,";
                Consulta += "A.Art_Estado from ARTICULO A, DEPOSITO_ARTICULO D  where  A.Art_Id = D.Art_Id and Art_Descripcion Like '%" + descripcion + "%'";
            }
            else
            {
                Consulta = " select A.Art_Id, A.Art_Descripcion, A.Art_Precio, D.Cantidad, A.Art_Tipo,";
                Consulta += "A.Art_Estado from ARTICULO A, DEPOSITO_ARTICULO D  where A.Art_Estado = 1 and A.Art_Id = D.Art_Id and Art_Descripcion Like '%" + descripcion + "%'";
           
            }

            DataTable Tabla = Conn.Buscar(Consulta);
            List<Articulos> ListaArticulos = new List<Articulos>();
 
            foreach (DataRow fila in Tabla.Rows)
            { 
            
            ListaArticulos.Add(this.Mapear(fila));
            
            }
            return ListaArticulos;
        }
        
        
        public Articulos Buscar(int IdArticulo, string tipousu)
        {
            String Consulta = "";
            if (tipousu == "Administrador")
            {
                //String Consulta = " Select * From ARTICULO Where Art_Id = " + IdArticulo;
                Consulta = " select A.Art_Id, A.Art_Descripcion, A.Art_Precio, D.Cantidad, A.Art_Tipo,";
                Consulta += "A.Art_Estado from ARTICULO A, DEPOSITO_ARTICULO D   where  A.Art_Id = D.Art_Id and A.Art_Id = " + IdArticulo;
            }
            else
            {
              Consulta = " select A.Art_Id, A.Art_Descripcion, A.Art_Precio, D.Cantidad, A.Art_Tipo,";
                Consulta += "A.Art_Estado from ARTICULO A, DEPOSITO_ARTICULO D   where A.Art_Estado = 1 and A.Art_Id = D.Art_Id and A.Art_Id = " + IdArticulo;
            
            }
            DataTable Tabla = Conn.Buscar(Consulta);
            if (Tabla.Rows.Count == 1)
                return this.Mapear(Tabla.Rows[0]);
            else
                return null;
        }

        //modificar!!!
        public List<Articulos> Listar(string tipousu)
        {
            String Consulta = "";
            if (tipousu == "Administrador")
            {
                Consulta = " select A.Art_Id, A.Art_Descripcion, A.Art_Precio, D.Cantidad, A.Art_Tipo,";
                Consulta += "A.Art_Estado from ARTICULO A, DEPOSITO_ARTICULO D   where A.Art_Id = D.Art_Id ";
            }
            else
            {
                Consulta = " select A.Art_Id, A.Art_Descripcion, A.Art_Precio, D.Cantidad, A.Art_Tipo,";
                Consulta += "A.Art_Estado from ARTICULO A, DEPOSITO_ARTICULO D   where A.Art_Estado = 1 and A.Art_Id = D.Art_Id ";
            
            }

            DataTable TablaArticulos = Conn.Buscar(Consulta);
            List<Articulos> ListaArticulos = new List<Articulos>();
            foreach (DataRow Fila in TablaArticulos.Rows)
            
            {
                ListaArticulos.Add(this.Mapear(Fila));
            }
            return ListaArticulos;
        }

        
        private Articulos Mapear(DataRow Fila)
        {
            Articulos Articulo_Mapeado = null;
            if (Fila != null)
            {
                Articulo_Mapeado = new Articulos();
                Articulo_Mapeado.Id_Art = Fila.IsNull("Art_Id") ? 0 : Convert.ToInt32(Fila["Art_Id"]);
                Articulo_Mapeado.Descripcion_Art = Fila.IsNull("Art_Descripcion") ? "" : Fila["Art_Descripcion"].ToString();
                Articulo_Mapeado.Estado_Art = Fila.IsNull("Art_Estado") ? false : Convert.ToBoolean(Fila["Art_Estado"]);
                Articulo_Mapeado.Precio_Art = Fila.IsNull("Art_Precio") ? 0 : Convert.ToDouble(Fila["Art_Precio"]);
                Articulo_Mapeado.Cantidad_Art = Fila.IsNull("Cantidad") ? 0 : Convert.ToInt32(Fila["Cantidad"]);
                Articulo_Mapeado.Tipo_Art = Fila.IsNull("Art_Tipo") ? TipoArticulo.Seguridad : (TipoArticulo)Fila["Art_Tipo"];
                
            }
            return Articulo_Mapeado;
        }
    }
}
